home *** CD-ROM | disk | FTP | other *** search
/ C++ für Kids / C++ for kids.iso / Buch / Obuttn1x.cpp < prev    next >
C/C++ Source or Header  |  1999-01-29  |  4KB  |  136 lines

  1. 7//---------------------------------------------------------------------------
  2. #include <vcl\vcl.h>
  3. #pragma hdrstop
  4.  
  5. #include "Obuttn1x.h"
  6.  
  7. TColor OColor[4] =
  8.   {clBlack, clGray, clSilver, clWhite};
  9.  
  10. //---------------------------------------------------------------------------
  11. static inline TOButton *ValidCtrCheck()
  12. {
  13.     return new TOButton(NULL);
  14. }
  15. //---------------------------------------------------------------------------
  16. __fastcall TOButton::TOButton(TComponent* Owner)
  17.     : TCustomControl(Owner)
  18. {
  19.   Color = clBtnFace;
  20.   SetSize (Rect (0, 0, 50, 50));
  21.   Pressed = false;
  22. }
  23. //---------------------------------------------------------------------------
  24. __fastcall TOButton::TOButton(TComponent* Owner, TColor Farbe)
  25.     : TCustomControl(Owner)
  26. {
  27.   Color = Farbe;
  28.   SetSize (Rect (0, 0, 50, 50));
  29.   Pressed = false;
  30. }
  31. //---------------------------------------------------------------------------
  32. __fastcall TOButton::TOButton(TComponent* Owner, TRect Rechteck)
  33.     : TCustomControl(Owner)
  34. {
  35.   Color = clBtnFace;
  36.   SetSize (Rechteck);
  37.   Pressed = false;
  38. }
  39. //---------------------------------------------------------------------------
  40. namespace Obuttn1x
  41. {
  42.     void __fastcall Register()
  43.     {
  44.         TComponentClass classes[1] = {__classid(TOButton)};
  45.         RegisterComponents("ZusΣtzlich", classes, 0);
  46.     }
  47. }
  48. //---------------------------------------------------------------------------
  49. void __fastcall TOButton::SetSize (TRect Rechteck)
  50. {
  51.   Left   =  Rechteck.Left;
  52.   Top    =  Rechteck.Top;
  53.   Width  =  Rechteck.Right  - Rechteck.Left;
  54.   Height =  Rechteck.Bottom - Rechteck.Top;
  55. }
  56. //---------------------------------------------------------------------------
  57. void __fastcall TOButton::SetColor(TColor OBrush, TColor OPen)
  58. {
  59.   Canvas->Brush->Color = OBrush;
  60.   Canvas->Pen->Color = OPen;
  61. }
  62. //---------------------------------------------------------------------------
  63. void __fastcall TOButton::MouseDown
  64.   (TMouseButton Button,  Classes::TShiftState Shift, int X, int Y)
  65. {
  66.   TCustomControl::MouseDown (Button, Shift, X, Y);
  67.   if (Button == mbLeft)
  68.   {
  69.     MButton = true;
  70.     Pressed = true;
  71.     Paint ();
  72.   }
  73. }
  74. //---------------------------------------------------------------------------
  75. void __fastcall TOButton::MouseUp
  76.   (TMouseButton Button,  Classes::TShiftState Shift, int X, int Y)
  77. {
  78.   TCustomControl::MouseUp (Button, Shift, X, Y);
  79.   MButton = false;
  80.   Pressed = false;
  81.   Paint ();
  82. }
  83. //---------------------------------------------------------------------------
  84. void __fastcall TOButton::MouseMove (TShiftState Shift, int X, int Y)
  85. {
  86.   TCustomControl::MouseMove(Shift, X, Y);
  87.   if (MButton)
  88.   {
  89.     if ((X>0)&&(X<Width)&&(Y>0)&&(Y<Height) && (Changed = true))
  90.     {
  91.       Paint ();
  92.       Changed = false;
  93.     }
  94.     else
  95.       Changed = true;
  96.   }
  97. }
  98. //---------------------------------------------------------------------------
  99. void __fastcall TOButton::Paint (void)
  100. {
  101.   // Liniendicke
  102.   Canvas->Pen->Width = 2;
  103.  
  104.   // OButton gedrⁿckt
  105.   if (Pressed)
  106.   {
  107.     for (int i=1; i<5; i++)
  108.     {
  109.       SetColor (OColor[(i-1)/2], OColor[(i-1)/2]);
  110.       Canvas->Arc (i, i, Width-i, Height-i, i, i, i, i);
  111.     }
  112.   }
  113.   // OButton nicht gedrⁿckt
  114.   else
  115.   {
  116.     for (int i=1; i<5; i++)
  117.     {
  118.       SetColor (OColor[i-1], OColor[i-1]);
  119.       Canvas->Arc (i, i, Width-i, Height-i, i, i, i, i);
  120.     }
  121.     // Zum Experimentieren:
  122.     /* for (int i=1; i<4; i++)
  123.     {
  124.       SetColor (Color, OColor[3]);
  125.       Canvas->Arc (i, i, Width-i, Height-i, Width-i, i, i, Height-i);
  126.       SetColor (Color, OColor[1]);
  127.       Canvas->Arc (i, i, Width-i, Height-i, i, Width-i, Height-i, i);
  128.     } */
  129.   }
  130.  
  131.   // OButton-FlΣche
  132.   SetColor (Color, Color);
  133.   Canvas->Ellipse (5, 5, Width-5, Height-5);
  134. }
  135. //---------------------------------------------------------------------------
  136.